'''
PHP调用时，传递参数的逻辑是：
    '-o', $this->writeFloder.DIRECTORY_SEPARATOR.$this->fileName.'.png', # 输出图片绝对路径
    '-p', $this->prompt, # 提示词
    '--steps', $this->steps, # 步数
    '-s', $this->seed, # 种子
    '-W', $this->width, # 图片宽度
    '-H', $this->height, # 图片高度
    '--norwkv', # 不使用RWKV 0 将使用rwkv 1 将不使用rwkv

python python_client.py -o 'a.png' -p 'test prompt' --steps 50 -s 123 -W 512 -H 512 --norwkv 0
'''

import sys
sys.path.append(sys.path[0] + '/local_packages')

import random
import json
import requests
import argparse

parser = argparse.ArgumentParser(description='SDXL Turbo web service')
parser.add_argument('-o', help='output image')
parser.add_argument('-p', help='prompt')
parser.add_argument('--steps', help='sample steps')
parser.add_argument('-s', help='seed, if < 0 use random seed')
parser.add_argument('-W', help='image width')
parser.add_argument('-H', help='image height')
parser.add_argument('--norwkv', help='0 use rwkv, 1 not use rwkv')

args, _ = parser.parse_known_args()
print(f"output image: {args.o}")
print(f"prompt: {args.p}")
print(f"steps: {args.steps}")
print(f"width: {args.W}")
print(f"height: {args.H}")
print(f"norwkv: {args.norwkv}")

data = {
    'output': args.o,
    'prompt': args.p,
    'steps': int(args.steps),
    'seed': int(args.s) if int(args.s) >= 0 else random.randint(0, 2**16 - 1),
    'width': int(args.W),
    'height': int(args.H)
}

if 0 == int(args.norwkv):
    result = requests.post(
        "http://127.0.0.1:8978/",
        data=json.dumps({
            'chinese': args.p,
            'seed': data['seed']
        })
    )
    data['prompt'] = result.json()['english']

requests.post(
    "http://127.0.0.1:8977/",
    data=json.dumps(data)
)
